//
//  GraphicsView.m
//  test02
//
//  Created by lzh on 2020/10/17.
//  Copyright © 2020 NO. All rights reserved.
//

#import "GraphicsView.h"

@implementation GraphicsView

-(void)drawRect:(CGRect)rect{


#pragma mark    //1.##############设置绘图的上下文环境（context）
    /*
    [[UIColor redColor] setFill];
    //把context压入栈中，并把context设置为当前绘图上下文
    UIGraphicsPushContext(UIGraphicsGetCurrentContext());
    [[UIColor blackColor] setFill];
    //将栈顶的上下文弹出，恢复先前的上下文，但是绘图状态不变
    UIGraphicsPopContext();
    UIRectFill(rect); // black color
    */
#pragma mark    //2.###########设置绘图的状态（state）

//     [[UIColor redColor] setFill];
//     //压栈当前的绘图状态，仅仅是绘图状态，不是绘图上下文
//     CGContextSaveGState(UIGraphicsGetCurrentContext());
//     [[UIColor blackColor] setFill];
//     //恢复刚才保存的绘图状态
//     CGContextRestoreGState(UIGraphicsGetCurrentContext());
//     UIRectFill(rect);
    
#pragma mark 圆角
    

    UIBezierPath * path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:UIRectCornerTopRight cornerRadii:CGSizeMake(20, 20)];

    path.lineCapStyle = kCGLineCapRound;//线条拐角
    path.lineJoinStyle = kCGLineJoinRound;//终点处理

    CAShapeLayer * layer = [[CAShapeLayer alloc]init];
    layer.path = path.CGPath;
    layer.fillColor = [UIColor lightGrayColor].CGColor;
    layer.strokeColor = [UIColor blackColor].CGColor;

    [self.layer insertSublayer:layer atIndex:0];
    
    
 
    
    

    
    
}

/*
 在UIView子类的drawLayer:inContext:方法中也可以实现绘图任务，它是一个图层的代理方法，而为了能够调用该方法，需要给图层的delegate设置代理对象，其中代理对象不能是UIView对象，因为UIView对象已经是它内部根层（隐式层）的代理对象，再将它设置为另一个层的代理对象就会出问题
 
 一个view被添加到其它view上时，图层的变化如下：
  
 1>先隐式地把此view的layer的CALayerDelegate设置成此view
 2>调用此view的self.layer的drawInContext方法
 3>由于drawLayer方法的注释：If defined, called by the default implementation of -drawInContext:说明了drawInContext里if([self.delegate responseToSelector:@selector(drawLayer:inContext:)])就执行drawLayer:inContext:方法，这里我们因为实现了drawLayer:inContext:所以会执行
 4>[super drawLayer:layer inContext:ctx]会让系统自动调用此view的drawRect:方法，至此self.layer画出来了
 5>在self.layer上再加一个子layer，当调用[layer setNeedsDisplay];时会自动调用此layer的drawInContext方法
 6>如果drawRect不重写，就不会调用其layer的drawInContext方法，也就不会调用drawLayer:inContext方法
 */

-(void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx{
    
    [super drawLayer:layer inContext:ctx];
    
}




@end
